import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)


let lifeDataKey = "LivesMallStore"
let lifeData = {};

try {
	// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
	lifeData = uni.getStorageSync(lifeDataKey);
	console.log('LivesMallStore:', lifeData);
} catch (e) {
	console.log('存储信息错误：', e)
}

export function getToken() {
	const tempData = uni.getStorageSync('lifeData') || {};
	return tempData['vuex_token'];
}

// 保存变量到本地存储中
const saveLifeData = function(key, value) {
	// 判断变量名是否在需要存储的数组中
	if (saveStateKeys.indexOf(key) != -1) {
		// 获取本地存储的lifeData对象，将变量添加到对象中
		let tmp = uni.getStorageSync(lifeDataKey);
		// 第一次打开APP，不存在lifeData变量，故放一个{}空对象
		tmp = tmp ? tmp : {};
		tmp[key] = value;
		// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
		console.log('key:', tmp)
		uni.setStorageSync(lifeDataKey, tmp);
	}
}


// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = [
	'vuex_token',
	'vuex_search_list',
	'vuex_userDefaultTopImg',
	'vuex_shoping_cart',
	'vuex_shoping_cart_log',
	'vuex_shop_order_info',
	'vuex_address_info',
	'vuex_shoping_cartList',
	'vuex_shoping_detailInfo',
	'vuex_user_info',
	'vuex_video_record',
	'vuex_liveBarGiftList',
	
];
const store = new Vuex.Store({
	state: {
		// 如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量
		// 加上vuex_前缀，是防止变量名冲突，也让人一目了然
		vuex_liveBarGiftList:lifeData.vuex_liveBarGiftList ? lifeData.vuex_liveBarGiftList :{},//直播间礼物列表
		vuex_userDefaultTopImg: lifeData.vuex_userDefaultTopImg ? lifeData.vuex_userDefaultTopImg : '',
		vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
		vuex_tabbar_height: 64, //底部Tabbar高度单位px
		vuex_current_tabbar: 0,
		vuex_user_info: lifeData.vuex_user_info ? lifeData.vuex_user_info :{}, // 用户信息
		vuex_current_language: '', //当前本地语言
		vuex_is_android: uni.getSystemInfoSync().platform.toLowerCase() === 'android', //判断是否式安卓
		vuex_search_list: lifeData.vuex_search_list ? lifeData.vuex_search_list : [], //搜索缓存
		vuex_recharge_data: {
			bankType:'0'
		},
		vuex_common_config: {},
		vuex_shoping_cart:lifeData.vuex_shoping_cart ? lifeData.vuex_shoping_cart : [],//购物车数据
		vuex_shoping_cart_log:lifeData.vuex_shoping_cart_log ? lifeData.vuex_shoping_cart_log : [],//物流数据
		vuex_shop_order_info:lifeData.vuex_shop_order_info ? lifeData.vuex_shop_order_info : [],//订单详情
		vuex_address_info:lifeData.vuex_address_info ? lifeData.vuex_address_info :{},//地址临时存储,
		vuex_shoping_cartList:lifeData.vuex_shoping_cartList ? lifeData.vuex_shoping_cartList :{},//地址临时存储,
		vuex_anchor_info:{},//主播信息
		vuex_videoObj:{},//别删
		vuex_shoping_detailInfo:{},//售后订单详情
		vuex_message_curretn_info:{}, // 消息信息
		vuex_message_unread_content:0, // 消息未读数量
		vuex_receive_message_status:0 ,  // 接收到新得消息数目
		vuex_client_ip:"http://app.lives.mall.h2bms.cn/",
		vuex_video_record:{
			list:[],
			index:0
		}, // 视频记录
		vuex_app_config:{} ,// app config 
		vuex_online_message_list:[], // 用户在线后 接收到的消息，机器人处显示
	},
	mutations: {
		$uStore(state, payload) {
			// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
			let nameArr = payload.name.split('.');
			let saveKey = '';
			let len = nameArr.length;
			if (nameArr.length >= 2) {
				let obj = state[nameArr[0]];
				for (let i = 1; i < len - 1; i++) {
					obj = obj[nameArr[i]];
				}
				obj[nameArr[len - 1]] = payload.value;
				saveKey = nameArr[0];
			} else {
				// 单层级变量，在state就是一个普通变量的情况
				state[payload.name] = payload.value;
				saveKey = payload.name;
			}
			// 保存变量到本地，见顶部函数定义
			saveLifeData(saveKey, state[saveKey])
		}
	},
	getters: {
		homePageWindowInfo(state) {
			// 设备信息
			const deviceInfo = uni.getWindowInfo();
			const screenHeight = deviceInfo.screenHeight;
			const screenWidth = deviceInfo.screenWidth;
			// 状态栏高度
		    const statusBarHeight = deviceInfo.statusBarHeight;
			const safeArea = deviceInfo.safeAreaInsets.bottom
			const uniTabbarHeight = '90px'
			// 计算tabbar 实际高度
			const tabbarHeight = uniTabbarHeight || deviceInfo.safeAreaInsets.bottom + state.vuex_tabbar_height;

			return {screenHeight, statusBarHeight, tabbarHeight,screenWidth, safeArea};
		},
		// 用户状态 0 普通  1店主 2主播 3店铺&主播
		userStatus(state){
			const type = state.vuex_user_info.userType+''
			const  isStorekeeper = type == 3 || type == 1 || type.includes('1')
			const  isAnchor = type == 3 || type == 2|| type.includes('2')
			return {isStorekeeper,isAnchor}
		}
	}
})

export default store
